/**
 * Copyright 2011 Joe Choi, All rights reserved.
 */
package tao.data.structure.tree;

import java.util.List;

import tao.tao.Generalizable;

/**
 * A tree data structure
 * 
 * @author Joe Choi
 * @version 1.0.0
 */
public interface Tree<V> extends Generalizable<List<V>>, Node<V> {
	/**
	 * Get the number of subtrees
	 */
	public int degree();
	
	/**
	 * Get the subtrees of the tree
	 */
	public Trees<V> getSubtree();
	
	/**
	 * Converse the tree as a list in specific order
	 * 
	 * @see Traversal
	 */
	public List<V> generalize(Traversal.Factory<V> factory);
}